package com.iwuke.dance.activity;

import android.annotation.TargetApi;
import android.graphics.Bitmap;
import android.view.View;
import android.webkit.WebChromeClient;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.ProgressBar;

import com.iwuke.dance.R;
import com.iwuke.dance.gadget_view.TitleBarView;
import com.iwuke.dance.util.merchants_connect.NetworkEvent;

import androidx.activity.OnBackPressedCallback;
import de.greenrobot.event.Subscribe;
import de.greenrobot.event.ThreadMode;

/**
 * @author: 魏从响
 * @date: 2025/10/11
 * webView控件，用于展示h5页面或者链接
 */
public class WebViewActivity extends BaseActivity implements View.OnClickListener {

    private TitleBarView title_bar;
    private ProgressBar mProgressBar;
    private int mLastProgress = 0; // 记录上一次更新的进度
    private WebView web_view;
    public String webUrl="https://www.baidu.com";
    private OnBackPressedCallback onBackPressedCallback;

    /**
     * @description 网络实时监听
     */
    @Subscribe(threadMode = ThreadMode.MainThread)
    public void onEvent(NetworkEvent networkEvent){
        BaseActivity.setConnect(WebViewActivity.this,networkEvent,title_bar);
    }

    @Override
    protected int getView() {
        return R.layout.activity_web_view;
    }

    @Override
    protected void init(View mView) {

        title_bar = findViewById(R.id.title_bar);
        // 初始化 ProgressBar
        mProgressBar = findViewById(R.id.webview_progressbar);
        //webview控件，用于展示h5页面或者链接
        web_view = findViewById(R.id.web_view);



        title_bar.setTitleText("");
        title_bar.setLeftOnClick(this);

    }

    @Override
    protected void initData() {
        webUrl = getIntent().getStringExtra("text");

        WebViewClient webViewClient = new WebViewClient() {
            // 用于处理 API 24 (Android 7.0) 及以上版本的请求
            @TargetApi(android.os.Build.VERSION_CODES.N) // 或使用 Build.VERSION_CODES.LOLLIPOP 针对 API 21+
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
                String url = request.getUrl().toString();
                return handleUrlLoading(view, url);
            }

            // 用于兼容 API 24 以下的旧版本系统
//            @Override
//            public boolean shouldOverrideUrlLoading(WebView view, String url) {
//                return handleUrlLoading(view, url);
//            }

            /**
             * 统一的 URL 处理逻辑
             * @param view WebView 实例
             * @param url  要加载的 URL
             * @return 返回 true 表示拦截该请求，WebView 不加载；返回 false 则 WebView 继续加载[2](@ref)[6](@ref)
             */
            private boolean handleUrlLoading(WebView view, String url) {
                // 控制哪些链接在 WebView 内打开
                if (url != null && (url.startsWith("https://") || url.startsWith("http://"))) {
                    view.loadUrl(url);
                    // 返回 true 表示当前 WebView 已经处理了该 URL 的加载[2](@ref)
                    return true;
                }
                // 对于其他自定义协议（如 "example-app:"），可以在此处添加处理逻辑[5](@ref)
                // 返回 false 表示让 WebView 使用默认行为处理此 URL[6](@ref)，这通常意味着对于无法识别的协议，系统可能会尝试启动外部应用
                return false;
            }

            @Override
            public void onPageStarted(WebView view, String url, Bitmap favicon) {
                // 页面开始加载
                super.onPageStarted(view, url, favicon);
                // 页面开始加载时，显示进度条并重置进度为0
                mProgressBar.setProgress(0);
                mProgressBar.setVisibility(View.VISIBLE);
            }

            @Override
            public void onPageFinished(WebView view, String url) {
                // 页面加载完成
                super.onPageFinished(view, url);
                //加载完成获取H5页面的标题
                title_bar.setTitleText(view.getTitle());//加载完成获取H5页面的标题
                // 页面加载完成，确保进度条达到100%并隐藏
                updateProgressBar(100);
            }
        };
        web_view.setWebViewClient(webViewClient);
        web_view.setLayerType(View.LAYER_TYPE_HARDWARE, null);//开启硬件加速
        WebSettings settings = web_view.getSettings();
        settings.setJavaScriptEnabled(true); // 启用JavaScript
        settings.setDomStorageEnabled(true); // 启用DOM存储API
        settings.setDatabaseEnabled(true); // 启用数据库存储
        settings.setLoadWithOverviewMode(true); // 缩放至屏幕宽度
        settings.setUseWideViewPort(true); // 使用宽视口模式
        settings.setBuiltInZoomControls(true); // 启用内置缩放控件
        settings.setDisplayZoomControls(false); // 隐藏缩放控件

        web_view.setWebChromeClient(new WebChromeClient() {
            @Override
            public void onProgressChanged(WebView view, int newProgress) {
                // 更新加载进度
//                setProgress(newProgress);
                // 只有当进度变化超过5%，或者到达关键点（如0，100）时才更新
                if (Math.abs(newProgress - mLastProgress) >= 5 || newProgress == 100 || newProgress == 0) {
                    updateProgressBar(newProgress);
                    mLastProgress = newProgress;
                }
            }

            @Override
            public void onReceivedTitle(WebView view, String title) {
                // 获取网页标题
                setTitle(title);
            }
        });

        // 加载URL
        web_view.loadUrl(webUrl);






        // 创建返回事件回调
        onBackPressedCallback = new OnBackPressedCallback(true /* 初始启用状态 */) {
            @Override
            public void handleOnBackPressed() {
                // 这里放入您原来的逻辑
                if (web_view.canGoBack()) {
                    web_view.goBack(); // WebView 内部返回(返回上一页)
                } else {
                    // 如果 WebView 不能再返回，则移除回调并执行默认返回操作
                    // 这会触发 Activity 本身的退出逻辑
                    onBackPressedCallback.setEnabled(false);
                    getOnBackPressedDispatcher().onBackPressed();
                }
            }
        };

        // 将回调添加到分发器，并与此 Activity 的生命周期绑定
        // 当 Activity 进入 STARTED 状态时回调生效，进入 STOPPED 状态时自动移除，避免内存泄漏[2](@ref)[8](@ref)
        getOnBackPressedDispatcher().addCallback(this, onBackPressedCallback);


    }

    /**
     * 更新进度条状态
     * @param newProgress 当前进度 (0-100)
     */
    private void updateProgressBar(int newProgress) {
        // 如果进度条是隐藏的，且进度开始，则显示它
        if (mProgressBar.getVisibility() == View.GONE && newProgress > 0) {
            mProgressBar.setVisibility(View.VISIBLE);
        }

        // 设置当前进度
        mProgressBar.setProgress(newProgress);

        // 当进度达到100时，隐藏进度条（表示加载完成）
        if (newProgress >= 100) {
            // 可以添加一个小的延迟，让用户看到100%的状态
            mProgressBar.postDelayed(new Runnable() {
                @Override
                public void run() {
                    mProgressBar.setVisibility(View.GONE);
                }
            }, 200); // 延迟200毫秒后隐藏
        }
    }

//    @Override
//    public void onBackPressed() {
//        if (web_view.canGoBack()) {
//            web_view.goBack(); // 返回上一页
//        } else {
//            super.onBackPressed(); // 退出Activity
//        }
//    }


    @Override
    public void onClick(View v) {
        if (v.getId()==R.id.img_left){//返回
            finish();
        }
    }
}
